class Solution {
    public int firstMissingPositive(int[] nums) {
        //思路和数独的想法很像，把每一个数都放在他应该放在的位置，比如5存放在Num[4];如果没有的话，就交换位置.
        int len = nums.length;
        for(int i = 0 ; i < len ; i++){
            while (nums[i] > 0 && nums[i] <= len && nums[nums[i]-1] != nums[i]){
                change(nums, nums[i]-1,i);
            }
        }
        for(int j = 0; j < len ; j++){
            if(nums[j] != j+1){
                return j+1;
            }
        }
        return len+1;
    }
    //改变位置
    public void change(int[] nums, int begin ,int end){
        int temp = nums[begin];
        nums[begin] = nums[end];
        nums[end] = temp;

    }
}